home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 32 / Amiga Format AFCD32 (Nov 1998, Issue 117).iso / -in_the_mag- / under_the_bonnet / cwfloppy-0.1.4 / cwfloppy.h < prev    next >
C/C++ Source or Header  |  1998-08-22  |  4KB  |  159 lines

  1. #ifndef _CWFLOPPY_H
  2. #define _CWFLOPPY_H
  3.  
  4. #include <linux/ioctl.h>
  5.  
  6. /* Change this if you want */
  7.  
  8. #define CWFLOPPY_MAJOR 120
  9.  
  10. /*
  11.  * Disk geometry description
  12.  */
  13.  
  14. struct cwfloppy_format {
  15.     const char name[32];
  16.     int blksize;               /* block size in bytes */
  17.     int numblocks;             /* number of blocks on the disk */
  18.  
  19.     unsigned char max_secs_per_track;    /* e.g. 21 for 1541 disks */
  20.     unsigned char heads;
  21.     unsigned char cylinders;
  22.     unsigned char readonly;
  23.  
  24.     int clock; /* 0 = high, 1 = low */
  25.     int readtime; /* slightly more than one rotation of the disk */
  26.  
  27.     struct cw_codec *codec;
  28. };
  29.  
  30. extern const struct cwfloppy_format cw_formats[];
  31.  
  32. #define CWGETPRM _IOR(2, 0x04, struct cwfloppy_format)
  33. #define CWFMTBEG _IO(2, 0x47)
  34. #define    CWFMTTRK _IO(2, 0x48)
  35. #define CWFMTEND _IO(2, 0x49)
  36.  
  37. #define FD_FILL_BYTE 0xF6 /* format fill byte. */
  38.  
  39. #ifdef __KERNEL__
  40.  
  41. #include <linux/version.h>
  42.  
  43. #if LINUX_VERSION_CODE < 0x020100
  44. #include <linux/stddef.h>
  45. #include <linux/timer.h>
  46. #include <linux/kdev_t.h>
  47. #endif
  48.  
  49. /*
  50.  * Some macros for the kernel module
  51.  */
  52.  
  53. #define MAJOR_NR CWFLOPPY_MAJOR
  54.  
  55. #define DEVICE_NAME "cwfloppy"
  56. #define DEVICE_REQUEST do_cw_request
  57. #define DEVICE_NR(device) (MINOR(device))
  58. #define DEVICE_ON(device)
  59. #define DEVICE_OFF(device)
  60. #define DEVICE_NO_RANDOM
  61. #define TIMEOUT_VALUE (6 * HZ)
  62.  
  63. /*
  64.  * Low-level routines -- sorry, only the headers :-(
  65.  */
  66.  
  67. typedef struct catweasel_drive {
  68.     struct catweasel_contr *contr; /* The controller this drive belongs to */
  69.     int number;                    /* Drive number: 0 or 1 */
  70.     int type;                      /* 0 = not present, 1 = 3.5" */
  71.     int track;                     /* current r/w head position (0..79) */
  72.     int diskindrive;               /* 0 = no disk, 1 = disk in drive */
  73.     int wprot;                     /* 0 = not, 1 = write protected */
  74. } catweasel_drive;
  75.  
  76. typedef struct catweasel_contr {
  77.     int iobase;                    /* 0 = not present */
  78.     void (*msdelay)(int ms);       /* microseconds delay routine */
  79.     catweasel_drive drives[2];     /* max. two drives on each controller */
  80.     int private[4];                /* private data */
  81. } catweasel_contr;
  82.  
  83. /* Initialize a Catweasel controller; c->iobase and c->msdelay must have
  84.    been initialized -- msdelay might be used */
  85. void catweasel_init_controller(catweasel_contr *c);
  86. /* Reset the controller */
  87. void catweasel_free_controller(catweasel_contr *c);
  88.  
  89. /* Set current drive select mask */
  90. void catweasel_select(catweasel_contr *c, int dr0, int dr1);
  91.  
  92. /* Start/stop the drive's motor */
  93. void catweasel_set_motor(catweasel_drive *d, int on);
  94.  
  95. /* Move the r/w head -- msdelay might be used */
  96. void catweasel_seek(catweasel_drive *d, int track);
  97.  
  98. /* Check for a disk change and update d->diskindrive
  99.    -- msdelay might be used. Returns 1 == disk has been changed */
  100. int catweasel_disk_changed(catweasel_drive *d);
  101.  
  102. /* Check if disk in selected drive is write protected. */
  103. int catweasel_write_protected(catweasel_drive *d);
  104.  
  105. /* Read data -- msdelay will be used */
  106. int catweasel_read(catweasel_drive *d, int side, int clock, int time);
  107.  
  108. /* Write data -- msdelay will be used */
  109. int catweasel_write(catweasel_drive *d, int side, int clock, int time);
  110.  
  111. /*
  112.  * The structures used by cwfloppy.c
  113.  */
  114.  
  115. struct cw_drive_struct {
  116.     struct cw_controller_struct *c;
  117.     catweasel_drive *d;
  118.     int format; /* 0..30 */
  119.     unsigned char *trackbuffer;
  120.  
  121.     int bufferedtrack;
  122.     int defectivetrack;
  123.     struct timer_list motor_off_timer;
  124.     int motor;
  125.  
  126.     int in_use;
  127.     kdev_t last_devt;
  128. };
  129.  
  130. struct cw_controller_struct {
  131.     catweasel_contr c;
  132.     struct cw_drive_struct drives[2];
  133. };
  134.  
  135. extern void cw_codec_error(const char *fmt, ...);
  136.  
  137. /*
  138.  * And some codec interface definitions
  139.  */
  140.  
  141. struct cw_codec {
  142.     int (*decode)(struct cw_drive_struct *drive,
  143.           int side,
  144.           int try);
  145.     void (*encode)(struct cw_drive_struct *drive,
  146.            int side);
  147. };
  148.  
  149. extern struct cw_codec cw_codec_msdos, cw_codec_amiga;
  150.  
  151. extern void codec_msdos_init();
  152. #endif /* __KERNEL__ */
  153.  
  154. #endif /* _CWFLOPPY_H */
  155.  
  156.  
  157.  
  158.  
  159.